iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
影片教學

文組生的Python爬蟲之旅系列 第 20

Day 20 BeautifulSoup模組二

  • 分享至 

  • xImage
  •  

接續昨天的影片,今天的內容為介紹「更精準地」搜尋HTML元素的方法~
想在大海撈針就變得簡單許多了(等等...好像沒這麼誇張/images/emoticon/emoticon37.gif

Yes

以下為影片中有使用到的程式碼

<!doctype html>
<!-- 請將此檔案儲存成bs4_HTML.html -->
<html lang="zh-tw">
<head>
    <meta charset="utf-8">
	<title>水母</title>
	<style>
        section.section1 {background-color:#AAFFEE;} /*薄荷綠*/
	    h1#title {background-color:#CCCCFF;} /*淡紫色*/
	    h1#content1 {color:#227700;} /*深綠色*/
	    h1#content2 {color:#7700BB;} /*深紫色*/
		span {color:red;}
	</style>
</head>
<body>
<h1 id="title">水母的天敵</h1>
<img src="DSC_0394.jpg" alt="於海生館拍攝的水母" height="300" width="450">

<section class="section1">
<h1 id="content1">海龜</h1>
<p>捕食水母為生,海龜除了<span>眼睛</span>外,身體其他部分都可以抵抗水母的毒性,牠們在捕食水母時會閉上眼睛。</p>
<a href="https://zh.wikipedia.org/wiki/%E6%B5%B7%E9%BE%9F">維基百科海龜連結</a>
</section>

<section class="section1">
<h1 id="content2">紫螺</h1>
<p>分布在熱帶太平洋溫暖的水域,愛吃漂浮在水面的水母。</p>
<a href="https://zh.wikipedia.org/wiki/%E7%B4%AB%E8%9E%BA">維基百科紫螺連結</a>
</section>

</body>
</html>
#使用HTML標籤屬性搜尋
#請將C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改為bs4_HTML.html在您電腦中的路徑
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_1 = objsoup.find(id = "title")
print("物件類型    :", type(objtag_1))
print("列印標籤    :", objtag_1)
print("列印標籤內容:", objtag_1.text)

print("="*40)

objtag_2 = objsoup.find(id = "content2")
print("物件類型    :", type(objtag_2))
print("列印標籤    :", objtag_2)
print("列印標籤內容:", objtag_2.text)
#使用CSS搜尋
#請將C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改為bs4_HTML.html在您電腦中的路徑
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_1 = objsoup.find(class_= "section1")
print("物件類型    :", type(objtag_1))
print("列印標籤    :", objtag_1)
print("列印標籤內容:", objtag_1.text)

print("="*100)

objtag_2 = objsoup.find_all(class_ = "section1")
print("物件類型    :", type(objtag_2))
print("列印標籤    :", objtag_2)
print("列印標籤內容:")
for data in objtag_2:
    print(data.text)
#select()
#請將C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改為bs4_HTML.html在您電腦中的路徑
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_1 = objsoup.select('h1') #尋找所有h1標籤的元素
print("所有h1標籤的元素:\n", objtag_1)
print(type(objtag_1[0]))
print("="*100)

objtag_2 = objsoup.select('.section1') #尋找所有CSS class屬性為section1的元素
print("所有CSS class屬性為section1的元素:\n", objtag_2)

print("="*100)

objtag_3 = objsoup.select('#title') #尋找所有CSS id屬性為title的元素
print("所有CSS id屬性為title的元素:\n", objtag_3)

print("="*100)

objtag_4 = objsoup.select('h1#title') #尋找所有<h1>且id屬性為title的元素
print("尋找所有<h1>且id屬性為title的元素:\n", objtag_4)

print("="*100)
#select()
#請將C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改為bs4_HTML.html在您電腦中的路徑
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_5 = objsoup.select('section.section1') #尋找所有<section>且class屬性為section1的元素
print("所有<section>且class屬性為section1的元素:\n", objtag_5)

print("="*100)

objtag_6 = objsoup.select('p span') #尋找所有在<p>元素內的<span>元素
print("所有在<p>元素內的<span>元素:\n", objtag_6)

print("="*100)

objtag_7 = objsoup.select('p > span') #尋找所有在<p>元素內的<span>元素,中間無其他元素
print("所有在<p>元素內的<span>元素,中間無其他元素:\n", objtag_7)

print("="*100)

objtag_8 = objsoup.select('img[height]') #尋找所有在<img>標籤且有height屬性的元素
print("尋找所有在<img>標籤且有height屬性的元素:\n", objtag_8)
#取得圖片網址
#請將C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改為bs4_HTML.html在您電腦中的路徑
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

img = objsoup.find('img')
print("圖片網址:", img['src'])
print("圖片網址:", img.get('src'))

如果在影片中有說得不太清楚或錯誤的地方,歡迎留言告訴我,謝謝您的指教。


上一篇
Day 19 BeautifulSoup模組一
下一篇
Day 21 BeautifulSoup模組三
系列文
文組生的Python爬蟲之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言